﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DTO;
using AutoMapper;
using System.Data.EntityModel;
using System.Data;


namespace Data
{
    public class PhieuThuTienRepository
    {
        private static PhieuThuTienDTO MapPhieuThuTienEFToPhieuThuTienDTO(PHIEUTHUTIEN phieuthutienEF)
        {
            Mapper.CreateMap<PHIEUTHUTIEN, PhieuThuTienDTO>();
            return Mapper.Map<PHIEUTHUTIEN, PhieuThuTienDTO>(phieuthutienEF);

        }
        private static PHIEUTHUTIEN MapPhieuThuTienDTOToPhieuThuTienEF(PhieuThuTienDTO phieuthutienDTO)
        {
            Mapper.CreateMap<PhieuThuTienDTO, PHIEUTHUTIEN>();
            return Mapper.Map<PhieuThuTienDTO, PHIEUTHUTIEN>(phieuthutienDTO);
        }
        public static List<PhieuThuTienDTO> GelAllPhieuThuTien()
        {
           
            List<PhieuThuTienDTO> list = new List<PhieuThuTienDTO>();
            try
            {
                QuanLyNhaSachEntities context = new QuanLyNhaSachEntities();
                var query = from phieuthutien in context.PHIEUTHUTIENList
                            select phieuthutien;
                foreach (var phieuthutienef in query)
                {
                    PhieuThuTienDTO phieuthutienDTO = MapPhieuThuTienEFToPhieuThuTienDTO(phieuthutienef);
                    list.Add(phieuthutienDTO);
                }
                 
            }
            catch
            {

            }
            return list;
                 
        }
        public static PhieuThuTienDTO GetPhieuThuTien(int maphieuthutien)
        {
            PhieuThuTienDTO phieuthutiendto = new PhieuThuTienDTO();
            using (QuanLyNhaSachEntities context = new QuanLyNhaSachEntities())
            {
                try
                {
                  /*  IQueryable<PHIEUTHUTIEN> query = from phieuthutien in context.PHIEUTHUTIENList
                                where phieuthutien.MaPhieuThuTien == maphieuthutien
                                select phieuthutien;*/
                    var query = from phieuthutien in context.PHIEUTHUTIENList
                                where phieuthutien.MaPhieuThuTien == maphieuthutien
                                select phieuthutien;

                    PHIEUTHUTIEN phieuthutienEF = (PHIEUTHUTIEN)query;
                                      
                    phieuthutiendto = MapPhieuThuTienEFToPhieuThuTienDTO(phieuthutienEF);
                }
                catch
                {
                }
                return phieuthutiendto;
            }
         
        }
        public void Insert(PhieuThuTienDTO phieuthutienDTO)
        {
            try
            {
                using (QuanLyNhaSachEntities context = new QuanLyNhaSachEntities())
                {
                    PHIEUTHUTIEN phieuthutienEF = new PHIEUTHUTIEN();
                    phieuthutienEF = MapPhieuThuTienDTOToPhieuThuTienEF(phieuthutienDTO);
                    context.PHIEUTHUTIENList.AddObject(phieuthutienEF);
                    context.SaveChanges();
                }
            }
            catch (Exception)
            {

            }
        }
        public void Update(PhieuThuTienDTO phieuthutienDTO)
        {
            try
            {
                using (QuanLyNhaSachEntities context = new QuanLyNhaSachEntities())
                {
                    EntityKey key = context.CreateEntityKey("PHIEUTHUTIENList", new PHIEUTHUTIEN { MaPhieuThuTien = phieuthutienDTO.MaPhieuThuTien });
                    PHIEUTHUTIEN origphieuthutien = context.GetObjectByKey(key) as PHIEUTHUTIEN;
                    context.Detach(origphieuthutien);
                    context.Attach(origphieuthutien);
                    PHIEUTHUTIEN updatephieuthutien = MapPhieuThuTienDTOToPhieuThuTienEF(phieuthutienDTO);
                    context.ApplyCurrentValues<PHIEUTHUTIEN>("PHIEUTHUTIENList", updatephieuthutien);
                    context.SaveChanges();
                }
            }
            catch(Exception)
            {

            }
        }
    }
}
